简介
本文不讲如何使用逻辑回归,主要会讲一下逻辑回归的算法和模型背后的假设。主要分为两部分,一个是逻辑回归公式的推导,其次会讲述一下如何理解sigmoid函数。
逻辑回归推导
首先我们知道逻辑回归的一个sigmoid
假设,这个假设背后的由来我们会在后面给出,请先记得这个假设。公式如下: \[ p(y=1|x) = \frac {1} {1+e^{-(\theta^Tx+b)}} \tag1\] 这个假设告诉我们分为正样本的概率为(1)中右式。其中\(x\)为输入的向量,计算的结果与0.5
比较,如果大于0.5则为正样本。右式的值域易知为(0,1)。对于负样本,有: \[ p(y=0|x) = 1-p(y=1|x) \tag2\] 综合上述二式可得: \[ p(y|x) = p(y=1|x)^yp(y=0|x)^{1-y} \tag3\] 注意得到上式用到了数学的trick,即下式: \[\begin{cases}
p(y=1|x),y=1\\
p(x=0|x),y=0\\
\end{cases}
\]
我们继续往下。事实上,从(3)式我们就知道了概率函数\(p(y|x)\),拿到概率函数,我们可以求其最大似然估计(maximum likelihood estimation,MLE)。
MLE是用来估计概率模型的参数的一种方法,最大似然估计会寻找关于 \(\theta\) 的最可能的值(即,在所有可能的\(\theta\) 取值中,寻找一个值使这个采样的“可能性”最大化)。从数学上来说,我们可以在\(\theta\)的所有可能取值中寻找一个值使得似然函数取到最大值。这个使可能性最大的\(\widehat{\theta}\)值即称为 \(\theta\)的最大似然估计。由定义,最大似然估计是样本的函数。
如果有n
个样本,那么其似然函数为(3)式的n
个样本的乘积: \[ likelihood=\prod_{i=1}^np(y_i|x_i) \tag4\] \[ likelihood=\prod_{i=1}^np(y_i=1|x_i)^{y_i}p(y_i=0|x_i)^{1-y_i} \tag5\] 对(5)取log: \[ log\_likelihood=\sum_{i=1}^ny_i*ln(p(y_i=1|x_i))+(1-y_i)*ln(p(y_i=0|x_i)) \tag6\] 于是就变成了对数似然函数(6),对log_likelihood
,我们是希望它越大越好(极大似然估计),如果对其取负,则可以作为损失函数,我们是希望损失越小越好。这里的优化方法,先从简单的说,可用梯度下降进行迭代优化(对数似然函数对应地用梯度上升)。
我们现在把最初始的(1)式代入(6): \[ log\_likelihood=\sum_{i=1}^ny_i*ln(\frac {1} {1+e^{-(\theta^Tx_i+b)}})+(1-y_i)*ln(1-\frac {1} {1+e^{-(\theta^Tx_i+b)}}) \tag7\] 对于sigmoid
函数,求导是非常方便的。即有: \[ f(x)=\frac1{1+e^{-x}} \tag8\] \[ f^\prime(x)=f(x)*(1-f(x)) \tag9\] 那么(7)式对\(\theta\)求梯度有: \[ \nabla_\theta log\_likelihood=\sum_{i=1}^n x_i*(y_i-\frac{1}{1+e^{-(\theta^T x_i+b)}}) \tag{10}\] 其中(10)式中的b
可以先忽略(可以与\(\theta\)统一)。
迭代优化方式
BGD(Batch Gradient Descent)
对极大似然函数梯度上升,有: \[ \vec\theta_{i+1}= \vec\theta_{i}+\lambda*\nabla_\theta log\_likelihood \tag{11}\] 把(10)代入,即: \[ \vec\theta_{i+1}= \vec\theta_{i}+\lambda*\sum_{i=1}^n \vec x_i*(y_i-\frac{1}{1+e^{-(\vec\theta^T \vec x_i+b)}}) \tag{12}\] (12)式就是全批量梯度更新方法,其中\(\lambda\)即为一般意义上的学习步长。从(12)式可以看到,要把n
个数据样本全部代入后方可进行梯度更新。计算来说是比较繁琐的。而根据监督学习的假设样本数据是依据某种联合概率分布独立同分布产生,那么可有一种一次用一个样本的梯度更新方式,就是SGD(Stochastic Gradient Descent)。
SGD(Stochastic Gradient Descent)
随机梯度更新方式就是在(12)式去掉了求和符号: \[ \vec\theta_{i+1}= \vec\theta_{i}+\lambda*\vec x_i*(y_i-\frac{1}{1+e^{-(\vec\theta^T \vec x_i+b)}}) \tag{13}\] 随机梯度更新方式来一条样本即可做一次更新,通常情况下会引入较大的随机性。BGD
和SGD
很明显都比较极端,那么就有了一种折中方式Mini-Batch GD
Mini-Batch GD(Mini-Batch Gradient Descent)
与BGD
类似,只是所有样本的计算换成部分样本计算: \[ \vec\theta_{i+1}= \vec\theta_{i}+\lambda*\sum_{i=1}^m \vec x_i*(y_i-\frac{1}{1+e^{-(\vec\theta^T \vec x_i+b)}}) \tag{14}\] 其中\(m\ll n\),这样做的好处就是可以综合SGD
和BGD
。在较快更新速度的同时可以有一定的随机性防止陷入局部最优。以上的梯度更新方式在神经网络的训练中也可以借鉴。
sigmoid函数的由来
我们在最开始有一个假设,一切的出发点为(1)中的假设。那么为什么会有这样一个假设呢?
我们先看一个一般性的二分类的贝叶斯公式,二类分别为C1
和C2
: \[ p(C1|x)=\frac{p(x|C1)p(C1)}{p(x|C1)p(C1)+p(x|C2)p(C2)} \tag{15}\] 我们对(15)式右边的分子分母同时除以\(p(x|C1)p(C1)\)(二分类问题可保证其一定不为0),那么就有: \[ p(C1|x)=\frac1{1+\frac{p(x|C2)p(C2)}{p(x|C1)p(C1)}} \tag{16}\] 我们可以令: \[a=ln\frac{p(x|C1)p(C1)}{p(x|C2)p(C2)} \tag{17}\] 那么把(17)代入(16),即有: \[ p(C1|x)=\frac1{1+e^{-a}} \tag{18}\] 上面的(18)式就是我们最初的sigmoid
函数。我们再看一下(17)式,用人话把\(ln\)的对象描述如下:分类为C1
的x
出现的概率比上分类为C2
的x
出现的概率。
广义指数分布函数族
虽然(18)式看着和我们最开始的假设很像,但细心的读者可以看到最开始假设的\(a\)是\(\theta\)和\(x\)的线性函数。而(17)式目前看不出来像。
我们先看一下广义指数分布函数族的概念,对于广义指数分布函数族,有: \[ p(x|\lambda_k)=h(x)g(\lambda_k)e^{\lambda_k^Tu(x)} \tag{19}\] 把(19)代入(17),有: \[a=ln\frac{h(x)g(\lambda_1)e^{\lambda_1^Tu(x)}p(C1)}{h(x)g(\lambda_2)e^{\lambda_2^Tu(x)}p(C2)} \tag{20}\] \(h(x)\)可以约掉,\(g(\lambda_i)\)是常数项可有: \[a=(\lambda_1-\lambda_2)^Tu(x)+ln(\frac{g(\lambda_1)}{g(\lambda_2)})+ln(\frac{p(C1)}{p(C2)}) \tag{21}\] 即: \[a=(\lambda_1-\lambda_2)^Tu(x)+const \tag{22}\]
上面就告诉我们,当\(p(x|C1)\)和\(p(x|C2)\)满足广义指数分布,并且是其中一种特例(\(u(x)=x\)),就可以满足\(a\)是\(\theta\)和\(x\)的线性函数,其中\((\lambda_1-\lambda_2)=\theta\)。
其他广义指数分布函数
这里给出结论,感兴趣者可作详细推导:满足\(a\)是\(\theta\)和\(x\)的线性函数的广义指数分布还有如下:
- Gaussian分布
- Binomial分布
- Poisson分布
- Bernoulli分布
可以看到逻辑回归的适用范围是比较广的。